package 滑动窗口;


import com.sun.deploy.util.StringUtils;

import javax.annotation.Resource;
import java.util.*;

/**
 无重复字符的最长子串
 输入:abcabcbb , s = 'a b c  3/ a b c  3 / b 1/b 1'
 输出: 3
 解释: 因为无重复字符的最长子串是 'abc'，所以其长度为 3。
 输入: s = "bbbbb"
 输出: 1
 解释: 因为无重复字符的最长子串是 "b"，所以其长度为 1。
 输入: s = "pwwkew"
 输出: 3
 解释: 因为无重复字符的最长子串是 "wke"，所以其长度为 3。
      请注意，你的答案必须是 子串 的长度，"pwke" 是一个子序列，不是子串。
 */
public class LeetCode3 {
    public static void main(String[] args) {
        String s = "abcabcbb";
        int result = lengthOfLongestSubstring("");
        System.out.println(result);
    }
    public static int lengthOfLongestSubstring(String s) {
        if (s.equals("")) {
            return 0;
        }
        int right = -1;
        int result = Integer.MIN_VALUE;
        Set<Character> set = new HashSet<>();
        for (int i = 0; i < s.length(); i++) {
            if (i != 0) {
                set.remove(s.charAt(i - 1));
            }
            while (right + 1 < s.length() && !set.contains(s.charAt(right + 1))) {
                set.add(s.charAt(right + 1));
                right++;
            }
            result = Math.max(result, right - i  + 1);
        }
        return result;
    }
}
